Many data storage and retrieval systems employ some level of error control coding so that errors introduced during the storage and retrieval processes can be corrected. In general, more complex error control codes can detect and correct a greater number of errors in a data word than can be detected and corrected using simpler error control codes. However, implementing complex error control codes increases the hardware and/or software resources necessary to encode and decode the data. Thus, memory system design often involves making trade-offs between system complexity and error detection and correction capability.